﻿using System;

namespace _20___面向对象___装箱拆箱
{
    class Program
    {
        static void Main(string[] args)
        {
            Test();
        }

        // 因为数据类型的本质区别：值、引用 
        // 外加一个万物皆对象 ：object
        //  存在一个局面： object 可以代言 值类型 （指向****的地址、值）
        //  这个局面中，如果代言是 引用类型，那没啥，否则就出现装箱。
        //  反之，从 object 中再度取出 值类型的数据时，就发生 拆箱。
        //  为了性能，尽量避免装箱和拆箱
        //  通过 il 代码能够看到： box 和 unbox 的关键字 
        //  存在的意义：ArrayList ，是个东西都可以装，在某些情况下还是很方便的。
        //   方便你写的代码和别人对接。

       static void Test() 
        {
            // 装箱
            int age = 18;
            object a = age; //box : 盒子，在这里做动词，标识装入盒子

            // 拆箱
            int agev2 = (int)a; // unbox  ：un - box，un 代表不做什么事情，unbox 不装盒子，也就是拆盒子
        }
    }
}
